package com.ceadeal.javafxboot.service;

import com.arcsoft.face.FaceFeature;
import com.arcsoft.face.FaceInfo;
import com.ceadeal.javafxboot.entity.FaceUserInfo;

import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * @Author: 张寒轩
 * @Date: 2021/3/20 9:18
 * @Description: 虹软人脸识别接口
 */
public interface IArcSoftService {

    /**
     * @auther 张寒轩
     * @date 2021/3/19 15:57
     * @description 人脸检测
     * @param file 图片
     * @return List<FaceInfo> 检测到的人脸信息数组
     */
    List<FaceInfo> detectFaces(File file);

    /**
     * @auther 张寒轩
     * @date 2021/3/19 15:57
     * @description 人脸检测
     * @param input 图片
     * @return List<FaceInfo> 检测到的人脸信息数组
     */
    List<FaceInfo> detectFaces(InputStream input);

    /**
     * @auther 张寒轩
     * @date 2021/3/19 15:57
     * @description 人脸检测
     * @param bytes 图片
     * @return List<FaceInfo> 检测到的人脸信息数组
     */
    List<FaceInfo> detectFaces(byte[] bytes);

    /**
     * @auther 张寒轩
     * @date 2021/3/20 9:41
     * @description 特征提取
     * @param file 图片
     * @return List<FaceFeature> 返回人脸特征数组
     */
    List<FaceFeature> extractFaceFeature(File file) throws InterruptedException;

    /**
     * @auther 张寒轩
     * @date 2021/3/20 9:41
     * @description 特征提取
     * @param input 图片
     * @return List<FaceFeature> 返回人脸特征数组
     */
    List<FaceFeature> extractFaceFeature(InputStream input) throws InterruptedException;

    /**
     * @auther 张寒轩
     * @date 2021/3/20 9:41
     * @description 特征提取
     * @param bytes 图片
     * @return List<FaceFeature> 返回人脸特征数组
     */
    List<FaceFeature> extractFaceFeature(byte[] bytes) throws InterruptedException;

    /**
     * @auther 张寒轩
     * @date 2021/3/20 9:24
     * @description 多线程人脸查找
     * @param faceFeature 需要查找人脸
     * @param faceUserInfos 人脸库
     * @param size 拆分数组大小
     * @return List<FaceUserInfo> 匹配条件人脸
     */
    List<FaceUserInfo> compareFaceFeature(FaceFeature faceFeature, List<FaceUserInfo> faceUserInfos, int size) throws InterruptedException, ExecutionException;

}
